package com.mo.axion.common.enums;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @author kyw7
 * 枚举工具类（获取枚举的描述、获取枚举的code、获取枚举的code列表）
 */
public class EnumUtil {

    private EnumUtil() {
    }

    /**
     * 获取枚举的描述
     * @param code 需要获取描述的枚举code
     * @param enumClass 枚举类
     * @param <T> 枚举实例
     * @return 描述
     */
    public static <T extends PowerfulEnum> String getDescriptionByCode(Integer code, Class<T> enumClass) {
        return Arrays.stream(enumClass.getEnumConstants())
                .filter(e -> Objects.equals(e.getCode(), code))
                .findFirst().map(PowerfulEnum::getDescription).orElse("");
    }

    /**
     * 获取枚举的code
     * @param code 需要获取枚举的code
     * @param enumClass 枚举类
     * @param <T> 枚举实例的code
     * @return 枚举实例
     */
    public static <T extends PowerfulEnum> T getEnumByCode(Integer code, Class<T> enumClass) {
        return Arrays.stream(enumClass.getEnumConstants())
                .filter(e -> Objects.equals(e.getCode(), code))
                .findFirst().orElse(null);
    }

    /**
     * 获取枚举的code列表
     * @param enumClass 枚举类
     * @param <T> 枚举实例
     * @return 枚举实例的code
     */
    public static <T extends PowerfulEnum> List<Integer> getCodeList(Class<T> enumClass) {
        return Arrays.stream(enumClass.getEnumConstants())
                .map(PowerfulEnum::getCode)
                .collect(Collectors.toList());
    }
}
